"use strict";
const CommonUtil = require('../../../../../common/util/CommonUtil');
const CONST = require('../../const/CONST');



const retUtil = function () {

    function retUtil() {
    }
// ------------------------------ 获取参数相关 ------------------------------------------
    /**
     * 从请求句柄中获取 number 类型的参数值
     *
     * @param req object 请求句柄
     * @param name string 请求参数名
     *
     * @return number number 类型参数值, 默认为 0
     * */
    retUtil.numberFromReq = function (req,name){
        return Number(req.query[name] || req.body[name] || '0')||0;
    };

    /**
     * 从请求句柄中获取 string 类型的参数值
     *
     * @param req object 请求句柄
     * @param name string 请求参数名
     *
     * @return str string 类型参数, 若取不到则为 null
     * */
    retUtil.stringFromReq = function (req,name){
        return req.query[name] || req.body[name] || null;
    };

    /**
     * 从请求句柄中直接提取 Array 字符串 类型的参数值, 并序列化为 Array
     *
     * @param req object 请求句柄
     * @param name string 请求参数名
     *
     * @return arr 数组, 若不存在或者非法 json, 则返回 null
     * */
    retUtil.arrayFromReq = function (req,name){
        let ret = null;
        let str = req.query[name] || req.body[name] || null;
        if (str === null || str.length < 2 || str[0]!=='[' || str[str.length-1]!==']') {
            ret = null;
        }else{
            try{
                ret = JSON.parse(str);
            }catch(err){
                console.log(__dirname + __filename + 'arrayFromReq err: ' + err);
            } finally {

            }
        }
        return ret;
    };
// ------------------------------ 返回相关 ------------------------------------------
    /*
    * 统一返回 json
    *
    * @param code 参考 CONST.CODE
    * @param data object 响应数据
    * @param res object 响应句柄
    * */
    retUtil.ret_func_json = function (code, data, res){
        let obj = {
            code: code,
            msg: CONST.MSG[code] || CONST.MSG[CONST.CODE.UNKNOWN_ERR],
            data: data || {}
        };
        // 返回
        res.set('Content-Type', 'application/json');
        res.json(obj);
    };

    /**
     * 统一返回成功的 json
     *
     * @param data object 响应数据
     * @param res object 响应句柄
     * */
    retUtil.ret_succ_json = function (data, res) {
        return retUtil.ret_func_json(CONST.CODE.SUCCESS, data, res);
    };

    /**
     * 统一返回失败的 json
     *
     * @param errCode 错误码
     * @param res object 响应句柄
     * */
    retUtil.ret_err_json = function (errCode, res) {
        return retUtil.ret_func_json(errCode, {}, res);
    };

// ------------------------------ 辅助函数相关 ------------------------------------------
    /**
     * 安全解析 json 字符串
     *
     * @author 王俊
     * @date 2017-11-19
     *
     * @param jsonString
     * @return result Object 若解析失败则为 null
     */
    retUtil.safe_parser_JSON_string = function (jsonString) {
        let result = null;
        if (!jsonString || jsonString.length < 2) {
            return result
        }
        try {
            result = JSON.parse(CommonUtil.process_before_JSON_Parse(jsonString));
        } catch (e) {
            console.log(__dirname + __filename + ' [safe_parser_JSON_string] JSON: ' + jsonString);
            console.log(__dirname + __filename + ' [safe_parser_JSON_string] err: ' + e);
        } finally {

        }
        return result;
    };

    return retUtil;
}();

module.exports = retUtil;